/**
 * @author Andrey Bodoev /// shonoru@gmail.com
 */


var map = new GMap2();
map.setMapType(G_PHYSICAL_MAP);
var start_point = new GLatLng(37.2281933, -6.8934261);
map.setCenter(start_point, 8);	

var scenario = [
	{
		'att': 'v1',
		'point': '5', 
		'url': 'v1_2',
		'link': 'Вторник, 7 августа. Остановка и починка корабля'
	}
]

var data_v1 = [];

var current_route; 
var logbook = []; 

var flag; 
var relative_flag; 


function json_request_rand(sub_url, kk) { // 
	current_route = sub_url; // определение маршрута	
	
	var url = "http://skkenaryo.googlecode.com/svn/trunk/demo/route_" + sub_url + ".json?"+Math.random(); 
	_IG_FetchContent(url, function(obj){
		var json = eval("(" + obj + ")");		
		
		for (var i = 0, length = json.route.length; i < length; i++) {			
			var str = json.route[i].ll;			
			var separate = str.search(/,/);			
			var lat = str.slice(0,separate);
			var lng = str.slice(separate+1, str.length);		
			
			data_v1.push({'ll': new GLatLng(lat, lng), 'link': json.route[i].link, 'zoom': json.route[i].zoom, 'left_img': json.route[i].left_img, 'content': json.route[i].content});				
		};
		
		//  adds
		if (kk == 1) {
			step_by_step();
		}
		if (kk == 2) {			
			check_sc();
			draw_again();
		}
		if (kk == 3){
			draw_marker();
			start();
		}
	});
}


function step_by_step(){

	if (flag == null){ 
		flag = 0;
		relative_flag = 0;
		write_logbook(); // первая запись
	}
	
	if (data_v1[flag+1].zoom != ''){
		map.setZoom(data_v1[flag+1].zoom);
	}
	
	if (data_v1[flag].left_img != ''){
		var div = document.getElementById('left_img');
		
		if (div.hasChildNodes()){
			div.removeChild(div.lastChild);
		}
		
		var img = document.createElement('img');
		div.appendChild(img);
		img.setAttribute('src', data_v1[flag].left_img);
	}
	
	var step_data = [];	
	
	step_data[0] = data_v1[flag].ll;
	step_data[1] = data_v1[flag+1].ll;	
	
	map.addOverlay(new GPolyline(step_data, "#000000", 3, 0.3));
	map.panTo(step_data[1]);
		
	flag++;
	relative_flag++;
	
	draw_marker();
	
	check_sc(); // после того как флаг увеличился можно сделать проверку
	
}

function step_and_write(){ 
	write_logbook();
	step_by_step();
}

function check_sc(){ // проверка сценария на события 
	
	var div = document.getElementById('variants');
	var ul = document.createElement('ul');
	var flag_check;
	
	if (div.hasChildNodes()){
		div.removeChild(div.lastChild);
	}
	
	for (var i = 0; i < scenario.length; i++){ // возможные варианты: два или более событий, не одного  
		if (scenario[i].att == current_route){
			if (scenario[i].point == relative_flag){
				var li = document.createElement('li');
				var text = document.createTextNode(scenario[i].link); 
				li.appendChild(text);
				li.setAttribute("onclick", "step_alter('" + scenario[i].url + "');")
				li.style.textDecoration = 'underline';
				li.style.cursor = 'pointer';
				ul.appendChild(li);
				
				flag_check = 1;
			}
		}		 
	}
	
	var last = data_v1.length - 1;
	if (last != flag){
		
		var li2 = document.createElement('li');
		var text2 = document.createTextNode(data_v1[flag].link);
		li2.appendChild(text2);
	
		if (flag_check != null){		
			li2.setAttribute("onclick", "step_and_write();")		
		} else {		
			li2.setAttribute("onclick", "step_by_step();")		
		}
		li2.style.cursor = 'pointer';
		li2.style.textDecoration = 'underline';
	
		ul.appendChild(li2);
	} else { // конец массива, подчеркивания нет, красный цвет
		var li2 = document.createElement('li');
		var text2 = document.createTextNode(data_v1[flag].link);
		li2.appendChild(text2);
		li2.style.color = '#cc0000';
		li2.style.textDecoration = 'none';
		ul.appendChild(li2);
	}
	
	div.appendChild(ul);
	
	if (flag == 0){ // первая запись 
		flag = null;
	}
}


function step_alter(sub_url){
	write_logbook();
	pop_data_v1();
	
	relative_flag = 0; // обнуление, в результате перемещения
	
	json_request_rand(sub_url, 1);	
}

function pop_data_v1(){ // освобождение массива данных до точки схождения с маршрута
	var pop_length = data_v1.length - flag - 1;
	for (var i = 0; i< pop_length; i++ ){
		data_v1.pop();
	}
	//alert(data_v1.length);
}


function write_logbook(){ // запись ведется при схождения с маршрута
	logbook.push({'att': current_route, 'point': flag});
}


function back_off_v3(){ // 

	if (logbook.length > 0){
		
		map.clearOverlays(); // должно быть одно место
		
		var last_element = logbook.length - 1;
		
		if (logbook[last_element].att == current_route){ // находимся на основном маршруте			
			flag = logbook[last_element].point;			
			relative_flag = find_r_flag();			
			check_sc();
			draw_again();
		} else { // когда последняя запись маршрута в логбуке != текущему маршруту
			/*
			 * поиск точки загрузки джейсона +
			 * высвобождение памяти +
			 * загрузка джейсона +
			 * установка флагов +
			 * проверка сценария +
			 */
			
			var point_json;
			if (find_point_json()){
				point_json = find_point_json();
			} else {
				point_json = 0;
			}		
			
			var pop_length;
			if (point_json == 0){ // почему
				pop_length = data_v1.length;
			} else {
				pop_length = data_v1.length - logbook[point_json].point - 1;
			}
			
			for (var i = 0; i < pop_length; i++){
				data_v1.pop();
			}
			
			flag = logbook[last_element].point;
			relative_flag = find_r_flag();
			
			
			json_request_rand(logbook[last_element].att, 2);			
			
			//alert(logbook[point_json].point); // вроде работает
			//alert('length: ' + data_v1.length + ' ; flag: ' + logbook[last_element].point);
			
		}
		// здесь будет функция прорисовки
		
		logbook.pop();
		
		//map.clearOverlays();
		//draw_again();
	}
}

function find_point_json(){ // ! здесь зарыта собака
	var last = logbook.length - 1;
	var alt_route = logbook[last].att;
	var k;
	for (var i = 1; i < logbook.length; i++){
		if (logbook[last - i].att != alt_route){
			return k = last - i; 
		}
	}
}

function find_displace(){ // возвращает точку смещения	
	var last = logbook.length - 1;	
	var att = logbook[last].att;
	
	for (var i = 0; i < logbook.length; i ++){
		var r = logbook.length - i - 1; //reverse
		if (logbook[r].att != att){
			return r 
		}
	}
}

function find_r_flag(){	// return relative flag
	var r_flag;
	var last = logbook.length - 1;
	
	if (find_displace()){
		var point_displace = find_displace();
		r_flag = logbook[last].point - logbook[point_displace].point; 
	} else {
		r_flag = logbook[last].point;
	}
	
	return r_flag;
}

function zero_data_v1(){
	for (var i = 0; i < data_v1.length; i++ ){
		data_v1.pop();
	}	
}

function draw_marker(){
	
	if (flag == null){		
		var m_flag = 0;		
	} else {
		var m_flag = flag;
	}
	
	var tabs = [];
	for (var i = 0, length = data_v1[m_flag].content.length; i < length; i++ ){
		tabs.push(new GInfoWindowTab(data_v1[m_flag].content[i].label,data_v1[m_flag].content[i].html));
	};
	
	var marker = create_marker(data_v1[m_flag].ll, tabs);
	map.addOverlay(marker);		
	marker.openInfoWindowTabsHtml(tabs, {disableGoogleLinks: true, selectedTab: 0});
		
}

function create_marker(point, tabs){
	var marker = new GMarker(point);
  	GEvent.addListener(marker, "click", function() {
    	marker.openInfoWindowTabsHtml(tabs, {disableGoogleLinks: true, selectedTab: 0});
  	});
  	return marker;
}

function draw_again(){
	var length_draw = flag + 1;
	for (var m_flag = 0; m_flag < length_draw; m_flag++){
		var step_data = [];
		if (m_flag != 0) {
			step_data[0] = data_v1[m_flag-1].ll;
			step_data[1] = data_v1[m_flag].ll;	
		}	
		
		map.addOverlay(new GPolyline(step_data, "#000000", 3, 0.3));
		var tabs = [];
		for (var i = 0, length = data_v1[m_flag].content.length; i < length; i++ ){
			tabs.push(new GInfoWindowTab(data_v1[m_flag].content[i].label,data_v1[m_flag].content[i].html));
		};
	
		var marker = create_marker(data_v1[m_flag].ll, tabs);
		map.addOverlay(marker);
		if (m_flag == (length_draw - 1)){
			marker.openInfoWindowTabsHtml(tabs, {disableGoogleLinks: true, selectedTab: 0});
			map.panTo(data_v1[m_flag].ll);
		}
	}
}

function start(){
	if (data_v1[0].left_img != ''){
		var div = document.getElementById('left_img');
		
		if (div.hasChildNodes()){
			div.removeChild(div.lastChild);
		}
		
		var img = document.createElement('img');
		div.appendChild(img);
		img.setAttribute('src', data_v1[0].left_img);
	}
	
	var div_v = document.getElementById('variants');
	var ul = document.createElement('ul');
	var li = document.createElement('li');
	var text = document.createTextNode(data_v1[0].link);
	li.appendChild(text);
	li.setAttribute('onclick', 'step_by_step();');
	li.style.textDecoration = 'underline';
	li.style.cursor = 'pointer';
	ul.appendChild(li);
	div_v.appendChild(ul);	
}

function message(txt){
	var div = document.getElementById('message');
	var text = document.createTextNode(txt);
	// создать стили и принимающий текст 
}
